--[[
    函数
]]


function Max(n1, n2)
    if n1 > n2 then
        return n1
    else
        return n2
    end
end

local function min(n1, n2)
    if n1 < n2 then
        ret = n1;
    else
        ret = n2;
    end
    return ret;
end

print(Max(10,12))
print(min(15,16))


function addPrint(n1, n2, Printf)
    Ret = n1 + n2;
    Printf(Ret)
end

funPrint = function (param)
    print(param)
end

addPrint(1,2,funPrint)


--[[
    多参返回
]]
function FindMax(a)
    local mi = 1;
    local m = a[mi];
    for i, value in ipairs(a) do
        if value>m then
            mi = i;
            m = value;
        end
    end
    return m,mi
end
print(FindMax({1,18,2,64,59,15,20}))


--[[
    多参传入
]]
function addsum(...)
    local s = 0;
    for i, value in ipairs({...}) do
        s = s+value;
    end
    return s
end
print(addsum(1,2,3,4,5,6,7,8,9))


--[[
    通常在遍历变长参数的时候只需要使用 {…}，然而变长参数可能会包含一些 nil，
    那么就可以用 select 函数来访问变长参数了：select('#', …) 或者 select(n, …)
        select('#', …) 返回可变参数的长度。
        select(n, …) 用于返回从起点 n 开始到结束位置的所有参数列表。
    调用 select 时，必须传入一个固定实参 selector(选择开关) 和一系列变长参数。
    如果 selector 为数字 n，那么 select 返回参数列表中从索引 n 开始到结束位置的所有参数列表，否则只能为字符串 #，
    这样 select 返回变长参数的总数。
]]

do
    function foo(...)
        for i = 1, select('#', ...) do-->获取参数总数
            local arg = select(i, ...); -->读取参数，arg 对应的是右边变量列表的第一个参数
            print("arg", arg);
        end
    end

    foo(1, 2, 3, 4);
end

